package com.shengzai

import scala.io.{BufferedSource, Source}

object Code20List {
  def main(args: Array[String]): Unit = {

    val list: List[Int] = List[Int](1, 2, 3, 4, 5)

    println(list)
    // 从List中取前n个元素
    println(list.take(2))
    println(list.take(3))
    // 通过下标取对应元素
    println(list(2))

    // 列表反转
    println(list.reverse)
    //判断元素是否在该列表中
    println(list.contains(2))
    //返回一个每个元素用||隔开的字符串
    println(list.mkString("||"))

    //(x:Int)=>x%2==1 匿名函数作用是如果是奇数那么返回true
    println(list.count((x:Int)=>x%2==1))
    println(list.count(_%2==1)) //简写


    println(list.head) // 取出列表中的第一个元素
    println(list.tail) // 取出列表中除了第一个元素以外其他元素

    println(list.isEmpty) // 查看列表是否为空
    println(list.length) // 获取长度
    println(list.max) // 元素的最大值
    println(list.min) // 元素的最小值

    // 高阶语法
    // 1.foreach 将列表中的所有元素进行依次取出
    // (f: A => U) : A表示列表中每一个元素的类型

    list.foreach((x:Int)=>{
      if (x%2==1)
        println(x)
    })
    //2.map函数
    // List(1, (), 3, (), 5, ()) 对于map函数来说，是传入一个函数f，执行函数f的中的逻辑，
    //   如果函数f在处理某个元素时，并没有返回值，那么对应map返回结果为 ()
    //   使用场景：对每个元素进行做包装，再将元素返回，并不适合对元素进行过滤操作
    val list2: List[AnyVal] = list.map((x: Int) => {
      if (x % 2 == 1) {
        true
      }else false
    })
    //奇数返回true 偶数返回false
    println(list2)

    val strings: Iterator[String] = Source.fromFile("hadoop_code/src/data/students.txt").getLines()

    val studentsList: List[String] = strings.toList

    val mapRes: List[studentsInfo] = studentsList.map(
      (lines: String) => {
        val info: Array[String] = lines.split(",")
        new studentsInfo(info(0), info(1), info(2).toInt, info(3), info(4))
      }
    )
    println(mapRes)

    //3.filter过滤
    val filterList: List[Int] = list.filter(
      _ % 2 == 1
    )
    filterList.foreach(println)

    //过滤出所有文科班的学生
    mapRes.filter(
      _.clazz.contains("文科")
    ).foreach(println)







  }

}
// 1500100001,施笑槐,22,女,文科六班
case class studentsInfo(id:String,name:String,age:Int,sex:String,clazz:String)
